package com.probox.activity.api.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.probox.common.core.annotation.Excel;
import com.probox.common.core.enums.ActivityStatusEnum;
import com.probox.common.core.enums.ActivityTypeEnum;
import com.probox.common.core.utils.StringUtils;
import com.probox.common.core.utils.money.PriceFormatUtil;
import com.probox.product.api.domain.ProductInfoVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;
import java.util.List;

/**
 * 对外展示的活动信息对象
 */
@Data
@ApiModel(description="活动基础信息")
public class ActivityInfoVo implements java.io.Serializable {

    //活动下的商品列表信息
    @ApiModelProperty(value = "活动下的商品列表信息")
    private List<ActivityInfoProVo> activityInfoProVo;

    // 用于模板的商品信息,套餐活动商品取这个
    @ApiModelProperty(value = "用于模板的商品信息,套餐活动商品取这个")
    private List<ProductInfoVo> proList;

    //活动ID
    private Long activityUid;
    /** 平台ID */
    @Excel(name = "平台ID")
    @ApiModelProperty(value = "平台ID(平台ID)")
    private Long platformUid;

    /** 活动类型（bargain砍价/seckill秒杀/limittime限时/group拼团/free新人免费领/packages套餐/score积分兑换/recharge充值套餐） */
    @Excel(name = "活动类型" , readConverterExp = "bargain砍价/seckill秒杀/limittime限时/group拼团/free新人免费领/packages套餐/score积分兑换/recharge充值套餐")
    @ApiModelProperty(value = "活动类型(bargain砍价/seckill秒杀/limittime限时/group拼团/free新人免费领/packages套餐/score积分兑换/recharge充值套餐)")
    private String activityType;

    /** 活动名称 */
    @Excel(name = "活动名称")
    @ApiModelProperty(value = "活动名称(活动名称)")
    private String activityName;

    /** 开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "开始时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "开始时间(开始时间)")
    private Date beginTime;

    /** 结束时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "结束时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "结束时间(结束时间)")
    private Date endTime;

    /** 规则简述 */
    @Excel(name = "规则简述")
    @ApiModelProperty(value = "规则简述(规则简述)")
    private String ruleDesc;

    /** 详细描述 */
    @Excel(name = "详细描述")
    @ApiModelProperty(value = "详细描述(详细描述)")
    private String detailedDesc;

    /** 充值金额 */
    @Excel(name = "充值金额(非付款金额)")
    @ApiModelProperty(value = "充值金额(非付款金额)")
    private Long rechargePrice;

    /** 套餐价格 */
    @Excel(name = "套餐价格")
    @ApiModelProperty(value = "套餐价格(套餐价格)")
    private Long packagesPrice;

    /** 套餐图片 */
    @Excel(name = "套餐图片")
    @ApiModelProperty(value = "套餐图片(套餐图片)")
    private String packagesUrl;

    /** 套餐限购 */
    @Excel(name = "套餐限购")
    @ApiModelProperty(value = "套餐限购(套餐限购)")
    private Long packagesLimit;

    /** 套餐库存 */
    @Excel(name = "套餐库存")
    @ApiModelProperty(value = "套餐库存(套餐库存)")
    private Long packagesStock;

    /** 销售数量 */
    @Excel(name = "销售数量")
    @ApiModelProperty(value = "销售数量(销售数量)")
    private Long packagesSaleStock;

    /** 预留支付时长，默认1个小时,单位分钟 */
    @Excel(name = "预留支付时长，默认1个小时,单位分钟")
    @ApiModelProperty(value = "预留支付时长，默认1个小时,单位分钟(预留支付时长，默认1个小时,单位分钟)")
    private Long payMinute;

    /** 是否自动拼团成功，1自动，0非自动 */
    @Excel(name = "是否自动拼团成功，1自动，0非自动")
    @ApiModelProperty(value = "是否自动拼团成功，1自动，0非自动(是否自动拼团成功，1自动，0非自动)")
    private String autoSuccess;

    /** 状态 1上架0下架-1删除 */
    @Excel(name = "状态 1上架0下架-1删除")
    @ApiModelProperty(value = "状态 1上架0下架-1删除(状态 1上架0下架-1删除)")
    private String dataStatus;

    @ApiModelProperty(value = "活动倒计时")
    private long endTimes;

    @ApiModelProperty(value = "活动开始倒计时")
    private long statrTimes;

    @ApiModelProperty(value = "差价")
    private  String differencePrice;

    @ApiModelProperty(value = "划线价")
    private String showActiivityPrice;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "活动预热时间" , width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty(value = "活动预热时间")
    private Date preHeatTime;

    public String getDataStatusName(){
        return ActivityStatusEnum.getNameByKey(dataStatus);
    }

    public String getActivityTypeName(){
        return ActivityTypeEnum.getNameByKey(activityType);
    }

    public String getPackagesPriceStr(){
        return PriceFormatUtil.format(packagesPrice);
    }

    public String getRechargePriceStr(){
        return PriceFormatUtil.format(rechargePrice);
    }

    public String getActivityImgUrl() {
        if(!StringUtils.isEmpty(packagesUrl)){
            String[] split = packagesUrl.split(",");
            return split[0];
        }
        return "";
    }

    public String checkType(){
        String type = "";
        switch(activityType){
            case "bargain" :
                type="0";
                break;
            case "seckill":
                type="1";
                break;
            case "limittime":
                type="2";
                break;
            case "group":
                type="3";
                break;
            case "free":
                type="4";
                break;
            case "packages":
                type="5";
                break;
            case "score":
                type="6";
                break;
            default:
                break;
        }
        return type;
    }

}
